package io.github.biezhi.elves.service;

import java.util.List;
import io.github.biezhi.elves.bidding.model.BiddingDTO;
import io.github.biezhi.elves.bidding.model.BiddingKeywordDTO;
import io.github.biezhi.elves.bidding.model.BiddingListDTO;
import io.github.biezhi.elves.bidding.model.BiddingListQuery;
import io.github.biezhi.elves.bidding.model.ChangeNoticeDTO;
import io.github.biezhi.elves.bidding.model.RecordBiddingNoticeDTO;
import io.github.biezhi.elves.bidding.model.DownloadBiddingHtmlDTO;
import io.github.biezhi.elves.bidding.model.NoticeTypeDTO;
import io.github.biezhi.elves.bidding.model.PurchaseModeDTO;
import io.github.biezhi.elves.bidding.model.RecordNoticeQuery;
import io.github.biezhi.elves.bidding.model.ResolveBiddingDTO;
import io.github.biezhi.elves.bidding.model.ResolveBiddingQuery;
import io.github.biezhi.elves.bidding.model.WinBiddingDTO;
import io.github.biezhi.elves.model.BiddingQuery;

/**
 * 投标管理模块service组件接口
 *
 */
public interface BidService {
	/***************************************新增操作 开始**********************************************************************/
	/**
	 * 新增发标公告数据
	 * @param	bidNotice	参数说明：发标公告DTO对象
	 * @return	处理结果
	 * @throws Exception
	 */
	Boolean saveBidding(BiddingDTO bidding) throws Exception;
	
	/**
	 * 新增中标公告数据
	 * @param	winBidding	参数说明：中标公告DTO对象
	 * @return	处理结果
	 * @throws Exception
	 */
	Boolean saveWinBidding(WinBiddingDTO winBidding) throws Exception;
	
	/**
	 * 新增记录投标网公告标题数据
	 * @param	recordBiddingNotice	参数说明：投标网公告标题DTO对象
	 * @return	处理结果
	 * @throws Exception
	 */
	Boolean saveRecordBiddingNotice(RecordBiddingNoticeDTO recordBiddingNotice) throws Exception;
	
	/**
	 * 新增下载投标网html数据
	 * @param	recordBiddingNotice	参数说明：投标网公告标题DTO对象
	 * @return	处理结果
	 * @throws Exception
	 */
	Boolean saveDownloadBiddingHtml(DownloadBiddingHtmlDTO downloadBiddingHtml) throws Exception;
	
	/**
	 * 新增公告清单存量数据(重复)
	 * @param	bidding		参数说明：公告清单DO对象
	 */
	Boolean saveBiddingStockRepeat(BiddingListDTO bidding) throws Exception;
	
	/**
	 * 新增存量公告清单数据
	 * @param	biddingStock		参数说明：存量公告清单DTO对象
	 */
	Boolean saveResolveBiddingStock(ResolveBiddingDTO biddingStock)  throws Exception;
	
	/**
	 * 新增处理解析公告清单数据
	 * @param	bidding		参数说明：公告清单DTO对象
	 */
	Boolean saveResolveBiddingList(BiddingListDTO bidding)  throws Exception;
	
	/**
	 * 新增变更公告
	 * @param changeNotice 参数说明：变更公告DTO对象
	 * @return
	 */
	Boolean saveChangeNotice(ChangeNoticeDTO changeNotice);
	/***************************************新增操作 结束**********************************************************************/
	
	/***************************************更新操作 开始**********************************************************************/
	/**
	 * 更新记录投标网公告标题数据
	 * @param	operationMode		参数说明：操作方式
	 * @param	id							参数说明：取的是网站上的标题链接的后缀作为标题id
	 * @return	处理结果
	 * @throws Exception
	 */
	Boolean updateRecordBiddingNotice(String operationMode, Long id) throws Exception;
	
	/**
	 * 更新存量公告清单数据表保存标识
	 * @param tableName		参数说明：表名
	 * @param save				参数说明：保存标识
	 * @param id					参数说明：id
	 */
	void updateBiddingListStock(String tableName, Integer save, Long id) throws Exception;
	
	/**
	 * 更新公告数据表为空的公告标题数据
	 * @param prjId		参数说明：项目编号
	 */
	void updateBiddingStockImport(String noticeTitle, String prjId) throws Exception;
	
	/**
	 * 更新公告数据表htmlContent数据
	 * @param downloadBiddingHtml		参数说明：下载对象
	 */
	void updateDownloadBiddingForHtmlContent(DownloadBiddingHtmlDTO downloadBiddingHtml) throws Exception;
	
	/**
	 * 更新公告数据表iframeHtmlContent数据
	 * @param downloadBiddingHtml		参数说明：下载对象
	 */
	void updateDownloadBiddingForIframeHtmlContent(DownloadBiddingHtmlDTO downloadBiddingHtml) throws Exception;
	/***************************************更新操作 结束**********************************************************************/
	
	/***************************************查询操作 开始**********************************************************************/
	/**
	 * 统计未解析投标网公告标题数据
	 * @return	统计未解析投标网公告标题数据
	 * @throws Exception
	 */
	Integer countRecordBiddingNotice() throws Exception;
	
	/**
	 * 根据记录id和标题查询记录表中是否存在公告标题id
	 * @param query
	 * @return	记录表中是否存在公告标题id
	 */
	Integer countRecordBiddingNoticeById(BiddingQuery query) throws Exception;
	
	/**
	 * 根据标题查询记录表中是否存在公告标题id
	 * @param query
	 * @return	记录表中是否存在公告标题id
	 */
	Integer countRecordBiddingNoticeByTitle(BiddingQuery query) throws Exception;
	
	/**
	 * 根据记录id、公告类型、采购方式、关键字查询记录表中是否存在公告标题id
	 * @param query
	 * @return	记录表中是否存在公告标题id
	 */
	Integer countRecordBiddingNoticeByQuery(BiddingQuery query) throws Exception;
	
	/**
	 * 根据记录id查询下载html数据表中是否存在公告标题id
	 * @param query
	 * @return	下载html数据表中是否存在公告标题id
	 */
	Integer countDownloadBiddingHtmlById(BiddingQuery query) throws Exception;
	
	/**
	 * 根据记录id、公告类型、采购方式、关键字查询下载html数据表中是否存在公告标题id
	 * @param query
	 * @return	下载html数据表中是否存在公告标题id
	 */
	Integer countDownloadBiddingHtmlByQuery(BiddingQuery query) throws Exception;
	
	/**
	 * 根据表名和关键字统计指定表数据是否存在表中
	 * @param	tableName	参数说明：表名
	 * @param	keyword		参数说明：关键字
	 * @param	noticeType	参数说明：公告类型
	 * @return	统计指定表数据是否存在表中
	 */
	Integer countByKeyword(String tableName, String keyword, String noticeType) throws Exception;
	
	/**
	 * 根据项目编号、公告标题、供应商和中标金额统计是否已存在解析过的数据
	 * @param query
	 * @return
	 */
	Integer countResolveHtml(BiddingListQuery query) throws Exception;
	
	/**
	 * 根据项目编号、供应商和中标金额统计过滤数据重复
	 * @param query
	 * @return
	 */
	Integer countResolveFilterRepeat(BiddingListQuery query) throws Exception;
	
	/**
	 * 查询初始化公告标题数据
	 * @param	query	参数说明：查询条件
	 * @return	公告标题数据集合
	 * @throws Exception
	 */
	List<RecordBiddingNoticeDTO> listRecordBiddingNotice(RecordNoticeQuery query) throws Exception;
	
	/**
	 * 查询公告详情页面数据
	 * @return	公告详情页面数据集合
	 */
	List<DownloadBiddingHtmlDTO> listDownloadBiddingHtml() throws Exception;
	
	/**
	 * 查询下载公告html为空的数据
	 * @return
	 */
	List<DownloadBiddingHtmlDTO> listDownloadBiddingHtmlIsNullHtmlContent() throws Exception;
	
	/**
	 * 查询下载公告iframe的html为空的数据
	 * @return
	 */
	List<DownloadBiddingHtmlDTO> listDownloadBiddingHtmlIsNullIframeHtmlContent() throws Exception;
	
	/**
	 * 根据记录ID查询公告详情页面数据
	 * @param	recordId	参数说明：记录ID
	 * @return	公告详情页面数据
	 */
	DownloadBiddingHtmlDTO downloadBiddingHtmlByRecordId(String recordId) throws Exception;
	
	/**
	 * 查询公告类型数据
	 * @return	公告类型集合
	 */
	List<NoticeTypeDTO> listNoticeType() throws Exception;
	
	/**
	 * 查询采购方式数据
	 * @param noticeId	参数说明：公告ID
	 * @return	采购方式数据集合
	 */
	List<PurchaseModeDTO> listPurchaseMode(String noticeId) throws Exception;
	
	/**
	 * 查询关键字数据
	 * @return	关键字数据集合
	 */
	List<BiddingKeywordDTO> listBiddingKeyword(Integer keywordType) throws Exception;
	
	/**
	 * 统计存量重复公告清单标识为未保存存量表(t_bidding_stock)的数据
	 * @param siteName
	 * @return
	 */
	Integer countResolveBiddingStockRepeat(String siteName);
	
	/**
	 * 公告清单存量数据重复
	 * @return
	 * throws Exception
	 */
	List<ResolveBiddingDTO> listResolveBiddingStockRepeatPage(ResolveBiddingQuery query) throws Exception;
	
	/**
	 * 公告清单存量数据
	 * @param query		参数说明：查询条件
	 * @return
	 * throws Exception
	 */
	List<ResolveBiddingDTO> listResolveBiddingStockPage(ResolveBiddingQuery query) throws Exception;
	
	/**
	 * 公告清单存量数据导入
	 * @return
	 * throws Exception
	 */
	List<BiddingListDTO> listBiddingStockImportPage() throws Exception;
	
	/**
	 * 根据网站名称查询最后一次爬取的公告发布时间
	 * @param siteName		参数说明：网站名称
	 * @param keyword			参数说明：网站名称
	 * @return
	 */
	RecordBiddingNoticeDTO getNewPubdateBySiteName(String siteName, String keyword) throws Exception;
	
	/**
	 * 根据关键字查询信息
	 * @param keyword		参数说明：关键字
	 * @return	关键字数据
	 */
	BiddingKeywordDTO getBiddingKeywordByKeyword(String keyword) throws Exception;
	
	/**
	 * 根据公告类型查询
	 * @param noticeType 参数说明：公告类型
	 * @return 公告详情页面数据
	 */
	List<DownloadBiddingHtmlDTO> downloadBiddingHtmlByNoticeType(String noticeType);
	/***************************************查询操作 结束**********************************************************************/

}